package ht6_huffman;

import java.util.Stack;

/**
 * Caracter
 * @author Jorge Lainfiesta 11142
 * @since Sep 18, 2012
 * @version 1
 */
public class Caracter implements Comparable {
    private String caracter;
    private int frecuencia;
    private Stack<String> codigo;

    /**
     * Constructor
     * @param car 
     */
    public Caracter(String car){
        this.caracter = car;
        this.frecuencia = 1;
        this.codigo = new Stack<String>();
    }
    
    public Caracter(){
        
    }
    
    /**
     * Auementa la cantidad
     */
    public void aumentarCantidad(){
        this.frecuencia++;
    }
    /**
     * @return the caracter
     */
    public String getCaracter() {
        return caracter;
    }

    /**
     * @param caracter the caracter to set
     */
    public void setCaracter(String caracter) {
        this.caracter = caracter;
    }

    /**
     * @return the cantidad
     */
    public int getFrecuencia() {
        return frecuencia;
    }

    /**
     * @param cantidad the cantidad to set
     */
    public void setCantidad(int cantidad) {
        this.frecuencia = cantidad;
    }

    /**
     * @return the codigo
     */
    public String getCodigo() {
        String code = "";
        Stack<String> cod = (Stack<String>) codigo.clone();
       // String bit = cod.pop();
        while(cod.size() > 0){
            code+=cod.pop();
        }
        return code;
    }
    
    /**
     * Ingresa un digito que formará el código
     * @param bit 
     */
    public void pushDigit(String bit){
        codigo.push(bit);
    }
    
    /**
     * Se revisa si es igual por el caracter que representa
     * @param o
     * @return 
     */
    @Override
    public boolean equals(Object o){
        Caracter c = (Caracter) o;
        return this.getCaracter().equals(c.getCaracter());
    }
    /**
     * Se revisa si es igual por el caracter que representa
     * @param o
     * @return 
     */
    public boolean equals(Caracter o){
        Caracter c = (Caracter) o;
        return this.getCaracter().equals(c.getCaracter());
    }

    /**
     * 
     * @param t
     * @return 
     */
    @Override
    public int compareTo(Object t) {
        Caracter c = (Caracter) t;
        return this.getFrecuencia() - c.getFrecuencia();
    }

}
